#ifndef _CLIENT_HEAD_H
#define _CLIENT_HEAD_H

#include <my_header.h>
#include <openssl/md5.h>

typedef enum
{
    USER_REGI,
    USER_LOGIN,
    USER_LOGIN2,
    L_R_SUCCESS,
    L_R_ERR,
    

    C_OP_CD,
    CD_SUCCESS,
  

    C_OP_LS,
    LS_SUCCESS,


    C_OP_RMDIR,
    RMDIR_SUCCESS,


    C_OP_MKDIR,
    MKDIR_SUCCESS,

    C_OP_REMOVE,
    REMOVE_SUCCESS,

    DIR_ERR,

    C_OP_PUTS_QUERY,
    RES_PUTS_COMFIRM,
    C_OP_PUTS_BEGIN,
    
    C_OP_GETS_QUERY,
    RES_GETS_COMFIRM,
    C_OP_GETS_BEGIN
}
MSG_TYPE;

typedef struct
{
    MSG_TYPE type;
    int args_len;
    char args_val[1024];
}RequestPackage;

typedef struct
{
    MSG_TYPE type;
    int args_len;
    char args_val[1024];
}ResponsePackage;


// 客户端解析器 
int send_resolver(char *statement, RequestPackage *prequest);
int recv_resolver(int target,int args_len,char*args,char*now_path_buf,int sockfd);

//client_api.c
int client_cd(int target,int args_len,char *args,int netfd,char *now_path_buf); 
int client_ls(int target,int args_len,char *args,int netfd,char *now_path_buf);
int client_pwd(int target,int args_len,char *args,int netfd,char *now_path_buf);
int client_mkdir(int target,int args_len,char *args,int netfd,char *now_path_buf);
int client_rmdir(int target,int args_len,char *args,int netfd,char *now_path_buf);
int client_rmfile(int target,int args_len,char *args,int netfd,char *now_path_buf);    
int client_puts_comfirm(int target,int args_len,char *args,int netfd,char *now_path_buf);
int client_gets_comfirm(int target,int args_len,char *args,int netfd,char *now_path_buf);
// int client_puts(ResponsePackage *presponse,const ClientVirtualPathStack* pvirtualpathstack,const int socked_fd);
// int client_gets(ResponsePackage *presponse,const ClientVirtualPathStack* pvirtualpathstack,const int socked_fd);
int recvn(int netfd, void *buf, long len, long *pProcessed);

// // puts的value信息：用户要从本地上传文件的路径 用户要将上传文件存在服务器哪里的路径
// // 从response包里取得 用户要从本地上传文件的路径（信息在value里，需要字符串截取）
// int puts_from_path(ResponsePackage *presponse, char *puts_from_path);

// // gets的value信息：用户要从服务器哪里获取文件的路径 用户要将从服务器获得的文件存到哪里的路径
// // 从response包里取得 用户要将从服务器上下载的文件存到本地哪里的路径
// int gets_save_path(ResponsePackage *presponse, char *gets_save_path);
// // 服务端也得写，获得的信息与客户端相反
#endif
